package javaCode.chapter13.set_;

import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author 徐州城
 * @version 1.0
 */
@SuppressWarnings("all")
public class LinkedHashSetSource {
    public static void main(String[] args) {
        //分析一下LinkedHashSet的底层机制
        Set linked = new LinkedHashSet();
        linked.add(new String("AA"));
        linked.add(123);
        linked.add(123);
        linked.add(new Customer("李",1001));
        linked.add(12);
        linked.add("HA");
        //LinkedHashMap

        System.out.println("linked=" + linked);
        //解读
        //1. LinkedHashSet 加入顺序和取出元素的顺序一致
        //2. LinkedHashSet 底层维护了LinkedHashMap(是HashMap子类)
        //3. LinkedHashSet 底层结构 (数组 + 双向链表)
        //4. 添加第一次时，直接将 数组table 扩容到16，存放结点的类型是 LinkedHashMap$Entry
        //5. 数组是 HashMap$Node[] 存放的数据是 LinkedHashMap$Entry类型
        /*
            //继承关系是在内部类完成的
            static class Entry<K,V> extends HashMap.Node<K,V> {
                Entry<K,V> before, after;
                Entry(int hash, K key, V value, Node<K,V> next) {
                    super(hash, key, value, next);
                }
            }
         */
    }
}

class Customer{
    private String name;
    private int no;

    public Customer(String name, int no) {
        this.name = name;
        this.no = no;
    }
}